package com.study.mybatisplus.beans;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;

/**
 * javaBean
 * <p>
 * 定义JavaBean中成员变量时所使用的类型:
 * 因为每个基本类型都有一个默认值:
 * int ==> 0
 * boolean ==> false
 */

/*
 * MybatisPlus会默认使用实体类的类名到数据库中找对应的表.
 * 根据类名Employee去数据库中查找tbl_employee会报错，解决方案：添加 @TableName(value="tbl_employee")
 *
 * 方案二：全局的表前缀策略配置
 * 	在配置文件中applicationContext.xml中配置 <property name="tablePrefix" value="tbl_"></property>
 * 	就无需再配置@TableName(value="tbl_employee")，会根据类名Employee去数据库中查找添加表前缀的tbl_employee
 */
//@TableName(value="tbl_employee")
public class Employee {
    /*
     * 主键策略相关配置
     * 方案一：@TableId:
     * 	 value: 指定表中的主键列的列名， 如果实体属性名与列名一致，可以省略不指定.
     *   type: 指定主键策略.IdType.AUTO - 主键自增
     *   方案二：全局的主键策略配置
     *	在配置文件中applicationContext.xml中配置<property name="idType" value="0"></property>
     *  就无需再配置@TableId(value="id" , type = IdType.AUTO)
     */
//    @TableId(value="id" , type = IdType.AUTO)
    private Integer id;

    // 下划线命名(last_name)和小驼峰(lastName)的转换
    // 方案一： @TableField(value = "last_name")
    //方案二：全局的策略配置 <property name="dbColumnUnderline" value="true"></property>
    @TableField(value = "last_name")
    private String lastName;
    private String email;
    private Integer gender;
    private Integer age;

    // TableField(exist = false) ：添加该注解，即说明该字段在数据表中没有对应的字段，在执行CRUD时会忽略该字段，不会导致报错
    @TableField(exist = false)
    private Double salary;

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + ", age="
                + age + "]";
    }


}
